#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>

using namespace std;

//class Date
//{
//public:
//	// 初始化列表
//	/*Date(int year, int month, int day)
//		: _year(year)
//		, _month(month)
//		, _day(day)
//	{}*/
//
//	//初始化列表是每个成员变量定义初始化的位置
//	Date(int year, int month, int day)
//		:_n(1)
//		,_month(2)
//	{
//		// 赋值修改
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//private:
//	// 声明
//	int _year = 1;// 缺省值
//	int _month;
//	int _day;
//
//	const int _n;
//};
//
//int main()
//{
//	// 对象实例化
//	Date d1(2024, 2, 19);
//
//	return 0;
//}

//class A
//{
//public:
//	A(int a = 0, int b = 1)
//		:_a(a)
//	{
//		cout << "A(int a = 0)" << endl;
//	}
//private:
//	int _a;
//};
//
//class Date
//{
//public:
//	//初始化列表是每个成员变量定义初始化的位置
//	//能用初始化列表建议取用初始化列表
//	Date(int year, int month, int day, int& x)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//		, _n(1)
//		, _ref(x)
//		, _aa()
//		,_p((int*)malloc(sizeof(4)*10))
//
//	{
//		if (_p == nullptr)
//		{
//			perror("malloc fail");
//		}
//
//		for (int i = 0; i < 10; i++)
//		{
//			_p[i] = 0;
//		}
//	}
//
//private:
//	// 声明
//	int _year = 1;// 缺省值
//	int _month;
//	int _day;
//
//	// 必须走初始化
//	const int _n;
//	int& _ref;
//	A _aa;
//	int* _p;
//};
//
//int main()
//{
//	// 对象实例化
//	int x = 10;
//
//	return 0;
//}

class C
{
public:
	C(int x = 0)
		:_x(x)
	{}
private:
	int _x;
};

class B
{
private:
	// 缺省
	int a = 1;
	int* p1 = nullptr;
	int* p2 = (int*)malloc(4);
};

int main()
{
	B bb;

	C cc1(1);
	// 单参数构造函数支持隐式类型的转换
	//2构造一个临时对象，再拷贝构造 -> 编译器优化了，同一个表达式连续步骤的构造，一般会被合二为一
	C cc2 = 2;


	return 0;
}